Histogrammverarbeitung und Filtermethoden¶
Matlab-Code und Bilder zu den Beispielen in der Ausarbeitung zum Thema Histogrammverarbeitung und Filtermethoden
Die Folgenden Beispiele wurden in Matlab implementiert. Der Code ist (wenn nicht anders angegeben) von Karla Schöne geschrieben, mit der Hilfe der auf Matlab Community Seite Matlab Answers erklärten Funktionen und Beispiele.
Histogrammverarbeitung¶
Intensity Scaling¶
matlab-code:
%Bild einlesen und in Graustufenbild umwandeln
picture = imread('Lena_River_Delta.jpg');
I = rgb2gray(picture);
%Bild über Funktion imadjust verarbeiten und Originalbild und verarbeitetes Bild geimeinsam ausgeben
J = imadjust(I);
imshowpair(I,J,'montage')
title('Originales Bild (links) Vs. Intensity Scaling (rechts)')
%die Histogramme beider Bilder nebeneinader ausgeben
figure
subplot(1,2,1)
imhist(I,64)
title('Originales Histogramm')
subplot(1,2,2)
imhist(J,64)
title('Histogramm nach Intensity Scaling')
Histogramme:
Bilder: Originales Bild (links) Vs. Intensity Scaling (rechts)

Histogram Equalization¶
matlab-code:
%Bild einlesen und in Graustufenbild umwandeln
picture = imread('Lena_River_Delta.jpg');
I = rgb2gray(picture);
%Bild über Funktion histeq equalisieren
J = histeq(I);
%Bild mit dazugehörigem Histogramm ausgeben
figure
subplot(1,2,1); imshow(I); title('Originalbild')
subplot(1,2,2); imhist(I,64); title('Histogramm des Originalbildes')
%verbessertes Bild mit dazugehörigem Histogramm ausgeben
figure
subplot(1,2,1); imshow(J); title('verbessertes Bild');
subplot(1,2,2); imhist(J,64); title('Histogramm des verbesserten Bildes')
%Kummuliertes Histogramm über histeq ausgeben
[J,T] = histeq(I);
figure
plot((0:255)/255,T); title('kummuliertes Histogramm');
Histogrammspezifizierung¶
matlab-code:
%Bild einlesen, in Graustufenbild umwandlen und Referenzbild einlesen
picture = imread('Lena_River_Delta.jpg');
img_gray = rgb2gray(picture);
ref = imread('Luis.png');
%Bild über Referenzbild verbessern
HistImRRef = imhist(ref)./numel(ref);
EnhPic = histeq(img_gray,HistImRRef);
%Originalbild, Referenzbild und verbessertes Bild ausgeben
figure;
subplot(223);imshow(ref);title('Referenzbild');
subplot(221);imshow(img_gray);title('Originalbild');
subplot(222);imshow(EnhPic);title('mit Histogram Specification verbessertes Bild');
Originalbild, verbessertes Bild und Referenzbild:
Quelle (Referenzbild): Hund Luis, fotografiert von C.P.Börner
Histogramm Statistik¶
matlab-code:
Isem=imread('Lena_River_Delta.jpg');
grayImage = rgb2gray(Isem);
Iblur = imgaussfilt(grayImage,1);
%J = imnoise(grayImage,'salt & pepper',0.02);
f=double(Iblur);
M=mean2(f);D=std2(f);
M
D
Bsize=[3 3];
k=[0.4 0.02 0.4];
E=4.0;
tic
fsem_enh=nlfilter(f,Bsize,@mylocstat,M,D,E,k);
t_nlfilter = toc;
Isem_enh=im2uint8(mat2gray(fsem_enh));
subplot(1,2,1),imshow(Iblur),title('Originalbild')
subplot(1,2,2),imshow(Isem_enh),title('Verbessertes Bild mit Histogramm Statistik')
Quelle: Alex Zuo (zuoxinian@yahoo.com.cn)
Originalbild und verbessertes Bild:

Filtermethoden¶
Gauss Filter¶
matlab-code:
%Bild einlesen und in Graustufenbild umwandeln
I = imread('Lena_River_Delta.jpg');
grayImage = rgb2gray(I);
%Bild mit Gauss Filter bearbeiten
Iblur = imgaussfilt(grayImage,4);
%Originalbil und verbessertes Bild darstellen
figure
imshowpair(grayImage,Iblur,'montage');
title('Originales Bild (links) Vs. nach Gauss gefiltertes Bild (rechts); mit σ=4')
Originalbild und verbessertes Bild:

%Bild einlesen und in Graustufenbild umwandeln
picture = imread('Lena_River_Delta.jpg');
grayImage = rgb2gray(picture);
%Bild convertieren, salt&pepper Noise drauflegen und mit Medianfilter filtern
ImgCon = im2uint8(grayImage)
SPImg = imnoise(ImgCon,'salt & pepper',0.02);
MedImg = medfilt2(SPImg, [3 3]);
%Salt&Pepper Bild und gefiltertes Bild darstellen
figure
imshowpair(SPImg,MedImg,'montage')
title('mit salt& pepper noise vs. mit Medianfilter bearbeitet')
Bild mit Salt & Pepper noise und mit Medianfilter bearbeitet:

Laplace-Filter¶
matlab-code:
%Bild einlesen und in Graustufenbild umwandeln
picture=imread('Lena_River_Delta.jpg');
grayImage = rgb2gray(picture);
%Bild über Laplace Filter verbessern
w=fspecial('laplacian',0);
EnhImg=imfilter(grayImage,w,'replicate');
%Originalbild und verbessertes Bild darstellen
figure,imshowpair(grayImage, EnhImg, 'montage');
title('Originalbild vs. bearbeitetes Bild mit Laplace Filter')
Originalbild und bearbeitetes Bild mit Laplace Filter:

Unschärfe Masken¶
matlab-code:
%Bild einlesen und in Graustufenbild umwandeln und unscharf machen (mit Gauss)
picture = imread('Lena_River_Delta.jpg');
grayImage = rgb2gray(picture);
blurgray = imgaussfilt(grayImage,3);
%Bild mit imsharpen Funktion bearbeiten
J=imsharpen(blurgray,'Radius',5,'Amount',2);
%Originalbild und verbessertes Bild darstellen
figure, imshowpair(blurgray,J,'montage')
title('Originalbild vs. Bild nach Anwendung von Unschärfemasken');
Originalbild und Bild nach Anwendung von Unschärfemasken:

Gradientenfilter¶
matlab-code:
%Bild einlesen und in Graustufenbild umwandeln
picture = imread('Lena_River_Delta.jpg');
grayImage = rgb2gray(picture);
%Bild verbessern mit Funktion imgradient
enhgray = imgradient(grayImage);
%Originalbild und verbessertes Bild darstellen
figure, imshowpair(grayImage,enhgray,'montage')
title('Originalbild vs. Bild bearbeitet mit Gradientenmethode')
Originalbild und Bild bearbeitet mit Gradientenmethode:
